package com.hejia.alauda.service;

import com.hejia.alauda.entity.Channel;
import com.hejia.alauda.entity.Popularize;
import com.hejia.alauda.entity.PopularizeCategory;
import com.hejia.alauda.entity.PopularizePlan;
import com.hejia.alauda.entity.example.PopularizeExample;
import com.hejia.alauda.utils.Pager;

import java.util.List;

/**
 * 推广服务
 * 
 * @author hyr
 *
 */
public interface PopularizeService {

	/**
	 * 根据名称查找推广
	 * 
	 * @param name
	 *            名称
	 * @param isAllPopularizing
	 *            所有推广
	 * @param pager
	 *            分页
	 * @return 推广列表
	 */
	Pager<Popularize> findPopularizes(String name, Boolean isAllPopularizing,
			Pager<Popularize> pager);

	/**
	 * 添加推广
	 * 
	 * @param popularize
	 *            推广
	 * @return 返回推广
	 */
	Popularize add(Popularize popularize);

	/**
	 * 更新推广
	 * 
	 * @param popularize
	 *            推广
	 * @return 返回推广
	 */
	Popularize update(Popularize popularize, String operator);

	/**
	 * 根据ID查找推广
	 * 
	 * @param id
	 *            推广ID
	 * @return 推广
	 */
	Popularize findById(long id);

	/**
	 * 删除推广
	 * 
	 * @param id
	 */
	void deletePopularize(long id);

	/**
	 * 根据条件查询推广列表
	 * 
	 * @param example
	 * @return
	 */
	List<Popularize> findPopularizesByExample(PopularizeExample example);

	/**
	 * 根据名称查找类别
	 * 
	 * @param name
	 *            类别名称
	 * @param pager
	 *            分页
	 * @return 类别列表
	 */
	Pager<PopularizeCategory> findPopularizeCategorys(String name,
			Pager<PopularizeCategory> pager);

	List<PopularizeCategory> findTopCategorys();

	/**
	 * 添加推广类别
	 * 
	 * @param category
	 *            推广类别
	 * @throws Exception
	 */
	PopularizeCategory add(PopularizeCategory category) throws Exception;

	/**
	 * 更新推广类别
	 * 
	 * @param category
	 *            推广类别
	 * @throws Exception
	 */
	PopularizeCategory update(PopularizeCategory category) throws Exception;

	/**
	 * 通过ID查找推广类别
	 * 
	 * @param id
	 *            推广类别ID
	 * @return 推广类别
	 */
	PopularizeCategory findCategoryById(Long id);

	/**
	 * 是否存在名称
	 * 
	 * @param category
	 *            名称
	 * @return true - 存在，false - 不存在
	 */
	boolean isExistName(PopularizeCategory category);

	/**
	 * 删除推广类别
	 * 
	 * @param id
	 *            推广类别ID
	 * @throws Exception
	 */
	void deletePopularizeCategory(long id) throws Exception;

	/**
	 * 是否存在稍小推广类别
	 * 
	 * @param id
	 *            推广类别ID
	 * @return true - 存在，false - 不存在
	 */
	public boolean isExistSmallerCategory(long id);

	List<PopularizeCategory> findSmallerCategorys();

	/**
	 * 是否被推广使用
	 * 
	 * @param categoryId
	 *            类别ID
	 * @return true - 已使用，false - 未使用
	 */
	boolean isUsedByPopularize(long categoryId);

	/**
	 * 添加推广方案
	 * 
	 * @param plan
	 *            推广方案
	 * @return 推广方案
	 */
	PopularizePlan add(PopularizePlan plan);

	/**
	 * 根据推广ID查找方案
	 * 
	 * @param id
	 *            推广ID
	 * @return 推广方案列表
	 */
	List<PopularizePlan> findPlansByPopularizeId(Long id);

	/**
	 * 删除推广方案
	 * 
	 * @param id
	 *            推广方案ID
	 * @return
	 */
	void deletePopularizePlan(long id);

	/**
	 * 根据关键词查找渠道
	 * 
	 * @param keyword
	 * @param pager
	 * @return
	 */
	Pager<Channel> findChannelsByKeyword(String keyword, Pager<Channel> pager);

	/**
	 * 添加渠道
	 * 
	 * @param channel
	 * @return
	 */
	Channel addChannel(Channel channel);

	/**
	 * 更新渠道
	 * 
	 * @param channel
	 * @return
	 */
	Channel updateChannel(Channel channel);

	/**
	 * 删除渠道
	 * 
	 * @param id
	 *            渠道ID
	 */
	void deleteChannel(Long id);

	/**
	 * 是否存在渠道
	 * 
	 * @param channel
	 *            渠道
	 * @return true - 存在，false - 不存在
	 */
	boolean isExistChannel(Channel channel);

	/**
	 * 通过ID查找
	 * 
	 * @param id
	 *            渠道ID
	 * @return 渠道
	 */
	Channel findChannelById(Long id);

	/**
	 * 查询来源ID列表
	 * 
	 * @param biggerCategoryId
	 *            大类ID
	 * @return
	 */
	List<String> findSourceIdByBiggerCategoryId(Long biggerCategoryId);

	/**
	 * 查询来源ID列表
	 * 
	 * @param categoryId
	 *            类别ID
	 * @return
	 */
	List<String> findSourceIdByCategoryId(Long categoryId);

	/**
	 * 查询来源ID列表
	 * 
	 * @param popularizeId
	 *            推广ID
	 * @return
	 */
	List<String> findSourceIdByPopularizeId(Long popularizeId);

}
